home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / lib / H / parser / parsetree.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  7.6 KB  |  277 lines

  1. /* ----------------------------------------------------------------
  2.  *   FILE
  3.  *    parsetree.h
  4.  *
  5.  *   DESCRIPTION
  6.  *    Routines to access various components and subcomponents of
  7.  *    parse trees.  
  8.  *
  9.  *   IDENTIFICATION
  10.  *    $Header: /private/postgres/src/lib/H/parser/RCS/parsetree.h,v 1.15 1992/07/01 05:09:28 mer Exp $
  11.  * ----------------------------------------------------------------
  12.  */
  13.  
  14. #ifndef PARSETREE_H
  15. #define PARSETREE_H        /* include once only */
  16.  
  17. /* ----------------
  18.  *    need pg_lisp.h for definitions of CAR(), etc. macros
  19.  * ----------------
  20.  */
  21. #include "nodes/pg_lisp.h"
  22.  
  23. /* ----------------
  24.  *    top level parse tree macros
  25.  *
  26.  *  parse tree:
  27.  *    (root targetlist qual)
  28.  * ----------------
  29.  */
  30. #define parse_root(parse)                   CAR(parse)
  31. #define parse_targetlist(parse)             CADR(parse)
  32. #define parse_qualification(parse)          CADDR(parse)
  33. #define parse_parallel(parse)    ((length(parse)<4)?LispNil:CAR(nthCdr(3,parse)))
  34.  
  35. /* eliminate this when tcop/pquery.c is unlocked */
  36. #define parse_tree_root(parse)              parse_root(parse)
  37.  
  38. /* ----------------
  39.  *    root macros
  40.  *
  41.  *  parse tree:
  42.  *    (root targetlist qual)
  43.  *     ^^^^
  44.  *  parse root:
  45.  *    (numlevels cmdtype resrel rangetable priority ruleinfo nestdotinfo)
  46.  * ----------------
  47.  */
  48. #define root_numlevels(root)                CInteger(CAR(root))
  49. #define root_command_type_atom(root)        CADR(root)
  50. #define root_command_type(root)    ((int) CAtom(root_command_type_atom(root)))
  51. #define root_result_relation(root)          CADDR(root)
  52. #define root_rangetable(root)               CADDR(CDR(root))
  53. #define root_priority(root)                 CADDR(CDR(CDR(root)))
  54. #define root_ruleinfo(root)                 CADDR(CDR(CDR(CDR(root))))
  55. #define root_nestdotinfo(root)              CADDR(CDR(CDR(CDR(CDR(root)))))
  56. #define root_uniqueflag(root)            nth(6, root)
  57. #define root_sortclause(root)            nth(7, root)
  58.  
  59. /* ----------------
  60.  *    result relation macros
  61.  *
  62.  *  parse tree:
  63.  *    (root targetlist qual)
  64.  *     ^^^^
  65.  *  parse root:
  66.  *    (numlevels cmdtype resrel rangetable priority ruleinfo nestdotinfo)
  67.  *               ^^^^^^
  68.  * ----------------
  69.  */
  70. #define parse_tree_result_relation(parse_tree) \
  71.     root_result_relation(parse_root(parse_tree))
  72.  
  73. /* ----------------
  74.  *    range table macros
  75.  *
  76.  *  parse tree:
  77.  *    (root targetlist qual)
  78.  *     ^^^^
  79.  *  parse root:
  80.  *    (numlevels cmdtype resrel rangetable priority ruleinfo nestdotinfo)
  81.  *                      ^^^^^^^^^^
  82.  *  range table:
  83.  *    (rtentry ...)
  84.  *
  85.  *  rtentry:
  86.  *    note: this might be wrong, I don't understand how
  87.  *    rt_time / rt_archive_time work together.  anyways it
  88.  *      looks something like:
  89.  *
  90.  *       (relname ?       relid timestuff flags rulelocks)
  91.  *    or (new/cur relname relid timestuff flags rulelocks)
  92.  *
  93.  *    someone who knows more should correct this -cim 6/9/91
  94.  * ----------------
  95.  */
  96. #define parse_tree_range_table(parse_tree) \
  97.     root_rangetable(parse_root(parse_tree))
  98.  
  99. /* .. GetIDFromRangeTbl, InitPlan, print_rtentries, print_subplan
  100.  * .. print_var
  101.  */
  102. #define rt_relname(rt_entry) \
  103.       ((!strcmp(CString(CAR(rt_entry)),"*CURRENT*") ||\
  104.         !strcmp(CString(CAR(rt_entry)),"*NEW*")) ? CAR(rt_entry) : \
  105.         CADR(rt_entry))
  106.  
  107. /* .. ExecutePlan, best-or-subclause-index, create_index_path
  108.  * .. exec-set-lock, in-line-lambda%598040865, index-info, index-innerjoin
  109.  * .. parameterize, plan-union-queries, plan-union-query
  110.  * .. preprocess-targetlist, print_rtentries, print_var, relation-info
  111.  * .. translate-relid, write-decorate
  112.  */
  113. #define rt_relid(rt_entry)             CADDR(rt_entry)
  114.  
  115.  
  116. /* .. ExecBeginScan, ExecCreatR, ExecOpenR, InitPlan
  117.  * .. in-line-lambda%598040864, print_rtentries 
  118.  */
  119. #define rt_time(rt_entry)              CADDR(CDR(rt_entry))
  120.  
  121. /*.. in-line-lambda%598040864 */
  122. #define rt_archive_time(rt_entry) \
  123.     ( nth(5, rt_entry) ? rt_time (rt_entry) : LispNil )
  124.  
  125. /* .. in-line-lambda%598040866, plan-union-queries, print_rtentries */
  126. #define rt_flags(rt_entry)         CADDR(CDR(CDR(rt_entry)))
  127.  
  128. /* .. add-read-locks, exec-make-intermediate-locks, exec-set-lock
  129.  *.. make-parameterized-plans, make-rule-locks, print_rtentries
  130.  * .. write-decorate
  131.  */
  132. #define rt_rulelocks(rt_entry)     CADDR(CDR(CDR(CDR(rt_entry))))
  133.  
  134.  
  135. /*
  136.  *    rt_fetch
  137.  *    rt_store
  138.  *
  139.  *    Access and (destructively) replace rangetable entries.
  140.  *
  141.  * .. ExecCreatR, ExecOpenR, ExecutePlan, InitPlan, add-read-locks
  142.  * .. exec-set-lock, plan-union-queries, write-decorate
  143.  */
  144. #define rt_fetch(rangetable_index, rangetable) \
  145.     nth((rangetable_index)-1, rangetable)
  146.  
  147. #define rt_store(rangetable_index, rangetable, rt) \
  148.     nth((rangetable_index)-1, rangetable) =  rt
  149.  
  150. /*
  151.  *    getrelid
  152.  *    getrelname
  153.  *
  154.  *    Given the range index of a relation, return the corresponding
  155.  *    relation id or relation name.
  156.  *
  157.  * .. best_or_subclause_index, create_index_path, index_info
  158.  * .. index_innerjoin, parameterize, preprocess_targetlist, print_var
  159.  * .. relation_info, translate_relid, write_decorate
  160.  */
  161. #define getrelid(rangeindex,rangetable) \
  162.     rt_relid(nth((rangeindex)-1, rangetable))
  163.  
  164. /* .. GetIDFromRangeTbl, print_subplan, print_var */
  165. #define getrelname(rangeindex, rangetable) \
  166.     rt_relname(nth((rangeindex)-1, rangetable))
  167.  
  168. /* ----------------
  169.  *    rule info macros
  170.  *
  171.  *  parse tree:
  172.  *    (root targetlist qual)
  173.  *     ^^^^
  174.  *  parse root:
  175.  *    (numlevels cmdtype resrel rangetable priority ruleinfo nestdotinfo)
  176.  *                                          ^^^^^^^^
  177.  *  ruleinfo:
  178.  *      (ruleid ruletag)
  179.  * ----------------
  180.  */
  181. /* .. exec-make-intermediate-locks, exec-set-lock */
  182. #define ruleinfo_ruleid(ruleinfo)     CAR(ruleinfo)
  183.  
  184. /* .. exec_make_intermediate_locks, exec_set_lock, make_rule_locks 
  185.  * .. process_rules
  186.  */
  187. #define ruleinfo_ruletag(ruleinfo)    CADR(ruleinfo)
  188.  
  189.  
  190. /* ----------------
  191.  *    target list macros
  192.  *
  193.  *  parse tree:
  194.  *    (root targetlist qual)
  195.  *          ^^^^^^^^^^
  196.  *  target list:
  197.  *    (tl_entry ...)
  198.  *     
  199.  *  tl_entry:
  200.  *    (resdom expr)
  201.  * ----------------
  202.  */
  203. /* .. MakeAttlist, compute-attribute-width, copy-vars, flatten-tlist-vars
  204.  * .. in-line-lambda%598040855, new-result-tlist, new-unsorted-tlist
  205.  * .. print_tlistentry, relation-sortkeys, replace-resultvar-refs
  206.  * .. set-join-tlist-references, sort-level-result
  207.  * .. targetlist-resdom-numbers, tlist-member, tlist-temp-references
  208.  */
  209. #define tl_resdom(tl_entry)          CAR(tl_entry)
  210. #define tl_node(tl_entry)            CAR(tl_entry)
  211. #define tl_is_resdom(tl_entry)       IsA(CAR(tl_entry),Resdom)
  212.  
  213.  
  214. /* .. MakeAttlist, copy-vars, find-tlist-read-vars, flatten-tlist
  215.  * .. flatten-tlist-vars, flatten-tlistentry, in-line-lambda%598041218
  216.  * .. in-line-lambda%598041219, in-line-lambda%598041221
  217.  * .. initialize-targetlist, matching_tlvar, new-join-tlist
  218.  * .. new-level-tlist, new-result-tlist, print_tlistentry
  219.  * .. relation-sortkeys, set-join-tlist-references, tlist-temp-references
  220.  * .. update-relations 
  221.  */
  222. #define tl_expr(tl_entry)             CADR(tl_entry)
  223.  
  224. /* ----------------------------------------------------------------
  225.  *    NEW STUFF
  226.  * ----------------------------------------------------------------
  227.  */
  228.  
  229. /*
  230. typedef struct parse_struct {
  231.     LispValue root;
  232.     LispValue targetlist;
  233.     LispValue qualification;
  234. } parse;   /* XXX constr name : new_parse */
  235.  
  236. /*
  237. typedef struct root_struct {
  238.   LispValue levels;
  239.   LispValue command_type ;
  240.   LispValue result_relation ;
  241.   LispValue rangetable ;
  242.   LispValue priority;
  243.   LispValue ruleinfo;
  244. } root;  /* XXX constr name: new_root */
  245.  
  246.  
  247. /*
  248. typedef struct resultrelation {
  249.  
  250.   LispValue id;
  251.   LispValue archive_level;
  252. } result_relation;
  253. */
  254. /*
  255. typedef struct rule_info {
  256.   LispValue id;
  257.   LispValue tag;
  258. } ruleinfo;
  259. */
  260. /*
  261. typedef struct rt_struct {
  262.   LispValue relation_name;
  263.   LispValue relation_id;
  264.   LispValue time;
  265.   LispValue archival_p ;
  266. } rt;
  267. */
  268. /*
  269. typedef struct tl_struct {
  270.   LispValue  resdom ;
  271.   LispValue  expr ; 
  272. } tl;
  273. */
  274.  
  275. #endif PARSETREE_H
  276.          
  277.